﻿@namespace AntDesign
@inherits AntDomComponentBase
@using OneOf;

<Dialog Config="@_dialogOptions" Visible="@Config.Visible" Style="@Config.Style">
    <div class="ant-modal-confirm-body-wrapper">
        <div class="ant-modal-confirm-body">
            @if (Config.Icon != null)
            {
                @(Config.Icon)
            }
            
            @if(Config.Title != null)
            {
                var titleValue = Config.Title.Value;
                <span class="ant-modal-confirm-title">
                    @if (titleValue.IsT0)
                    {
                        @(titleValue.AsT0)
                    }
                    else
                    {
                        @(titleValue.AsT1)
                    }
                </span>
            }
            
            <div class="ant-modal-confirm-content">
                @if (Config.Content.IsT0)
                {
                    @(Config.Content.AsT0)
                }
                else
                {
                    @(Config.Content.AsT1)
                }
            </div>
        </div>
        <div class="ant-modal-confirm-btns">
            @{
                RenderFragment BuildButton(ButtonProps props,
                    Func<MouseEventArgs, Task> onClick, out Button btnRef)
                {
                    btnRef = null;
                    if (props == null) return null;
                    var onClickEvent = new EventCallback<MouseEventArgs>(this, onClick);
                    Button innerBtnRef = null;
                    var children = props.ChildContent;
                    RenderFragment compontent = (@<Button @ref="@innerBtnRef"
                                                          OnClick="@onClickEvent"
                                                          Block="@props.Block"
                                                          Ghost="@props.Ghost"
                                                          Search="@props.Search"
                                                          Loading="@props.Loading"
                                                          Type="@props.Type"
                                                          Shape="@props.Shape"
                                                          Size="@props.Size"
                                                          Icon="@props.Icon"
                                                          Disabled="@props.Disabled"
                                                          Danger="@props.IsDanger">
                    @{
                        if (children.IsT0)
                        {
                            @(children.AsT0)
                        }
                        else
                        {
                            @(children.AsT1)
                        }
                    }
                </Button>);
           btnRef = innerBtnRef;
           return compontent;
       }
            }
            @switch (Config.ConfirmButtons)
            {
                case ConfirmButtons.OK:
                    {
                        @BuildButton(Config.Button1Props, async (e) =>
                        {
                            await HandleBtn1Click(e, ConfirmResult.OK);
                        }, out _okBtn);
                        break;
                    }
                case ConfirmButtons.OKCancel:
                    {

                        @BuildButton(Config.Button1Props, async (e) =>
                        {
                            await HandleBtn1Click(e, ConfirmResult.OK);
                        }, out _okBtn);

                        @BuildButton(Config.Button2Props, async (e) =>
                        {
                            await HandleBtn2Click(e, ConfirmResult.Cancel);
                        }, out _cancelBtn);

                        break;
                    }
                case ConfirmButtons.YesNo:
                    {
                        @BuildButton(Config.Button1Props, async (e) =>
                        {
                            await HandleBtn1Click(e, ConfirmResult.Yes);
                        }, out _okBtn);

                        @BuildButton(Config.Button2Props, async (e) =>
                        {
                            await HandleBtn2Click(e, ConfirmResult.No);
                        }, out _cancelBtn);

                        break;
                    }
                case ConfirmButtons.YesNoCancel:
                    {
                        @BuildButton(Config.Button1Props, async (e) =>
                        {
                            await HandleBtn1Click(e, ConfirmResult.Yes);
                        }, out _okBtn);

                        @BuildButton(Config.Button2Props, async (e) =>
                        {
                            await HandleBtn2Click(e, ConfirmResult.No);
                        }, out _cancelBtn);

                        @BuildButton(Config.Button3Props, async (e) =>
                        {
                            await HandleBtn3Click(e, ConfirmResult.Cancel);
                        }, out _);
                        break;
                    }

                case ConfirmButtons.RetryCancel:
                    {
                        @BuildButton(Config.Button1Props, async (e) =>
                        {
                            await HandleBtn1Click(e, ConfirmResult.Retry);
                        }, out _okBtn);

                        @BuildButton(Config.Button2Props, async (e) =>
                       {
                           await HandleBtn2Click(e, ConfirmResult.Cancel);
                       }, out _cancelBtn);

                        break;
                    }
                case ConfirmButtons.AbortRetryIgnore:
                    {
                        @BuildButton(Config.Button1Props, async (e) =>
                        {
                            await HandleBtn1Click(e, ConfirmResult.Abort);
                        }, out _okBtn);

                        @BuildButton(Config.Button2Props, async (e) =>
                        {
                            await HandleBtn2Click(e, ConfirmResult.Retry);
                        }, out _cancelBtn);

                        @BuildButton(Config.Button3Props, async (e) =>
                        {
                            await HandleBtn3Click(e, ConfirmResult.Ignore);
                        }, out _);

                        break;
                    }
            }
        </div>
    </div>
</Dialog>